const ws = require('nodejs-websocket'); //这个插件真的肥肠的nice 下面我会介绍他是如何的好用 官网https://github.com/sitegui/nodejs-websocket#readme
// const http = require('http');
//const server = http.createServer();

//封装发送消息的函数(向每个链接的用户发送消息)
const boardcast = (str)=>{
    // console.log(str);
  server.connections.forEach((connect)=>{ //遍历每一个链接的客户端对象 给每一个客户端对象发送消息 类似于广播。
   
      connect.sendText(str)
  })
};

//封装获取所有聊天者的nickname
const getAllChatter = ()=>{ 
      let chartterArr = [];
      server.connections.forEach((connect)=>{
          chartterArr.push({name:connect.nickname})
      });
    return chartterArr;
};



//保存所有链接的




//这一步创建一个服务的的ws服务器对象，该服务器对象非常的自动化，因为他会监听当有新的ws客户端连接时，会自动添加并保存在server.connections数组中，也就是server.connections中保存的是每一个链接的客户端对象
//如果我们有了这个客户端对象，那么我们就能通过这些客户端对象给指定的客户端发送消息，当然我们也可以在链接的时候主动保存该客户端对象，然后之后就能实现多对多指定聊天了.
const server = ws.createServer((connect)=>{ 
     console.log(connect.key); //每个链接上来的客户端对象 都会有一个唯一的key作为标识符。我们根据该标识符就可以给指定的客户端发送消息
     //链接上来的时候
      connect.on('text',(str)=>{
          let data = JSON.parse(str);
        
          boardcast('欢迎'+data.nickname)

      });

      //关闭链接的时候
    connect.on('close',()=>{

        //离开房间
        boardcast(JSON.stringify({
            type:'serverInformation',
            message:connect.nickname+'离开房间'
        }));

        //从在线聊天的人数上面除去
        boardcast(JSON.stringify({
            type:'chatterList',
            list: getAllChatter()
        }))
    });

    //错误处理
    connect.on('error',(err)=>{
        // console.log(err);
        console.log(connect.key)
    })

}).listen(5251,()=>{
    console.log("running")
});
